"1/2*a" 与 " a/2" 有什么区别

来源:百度知道 编辑:UC知道 时间:2024/06/19 09:09:16
用迭代法求平方根函数
一·
double sqrt(int a)
{
double x,y;
x=a/2;
y=(x+a/x)/2;
while((y-x)*(y-x)>1e-14)
{
x=y;
y=(x+a/x)/2;
}
return x;

}
跟二·
double sqrt(int a)
{
double x,y;
x=1/2*a;
y=(x+a/x)/2;
while((y-x)*(y-x)>1e-14)
{
x=y;
y=(x+a/x)/2;
}
return x;

}
有什么区别吗?为什么第一个可以用,第二个函数调试时输入9就返回
"1.#INF" ??
有高手教一下吗??谢了

对于double类型没有区别吧

x=1/2*a;
改为x=(1.0/2)*a;就没问题了
1、2都是int型,1/2结果(int型)取整数部分,为0

x=1/2*a;
改成x=(1.0/2)*a;就没问题了
因为1、2都是int型,所以1/2结果(int型)取整数部分,为0

把第二个函数的1/2改成1.0/2就行了,这是数值类型的原因